热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于鲁棒弹性变形的视差容忍图像拼接-Python实现

本文介绍了《视差容忍图像拼接基于鲁棒弹性变形》(Parallax-TolerantImageStitchingBasedonRobustElasticWarping)论文的Python实现,主要针对两幅图像的拼接。该方法通过弹性变形技术提高图像拼接的质量,尤其是在存在视差的情况下。

基于鲁棒弹性变形的视差容忍图像拼接 - Python实现

  • 介绍
    • 代码实现
    • 运行结果展示


介绍

本项目实现了J. Li等人在IEEE Transactions on Multimedia上发表的《视差容忍图像拼接基于鲁棒弹性变形》论文中的算法。该算法特别适用于处理具有视差的图像拼接问题,通过引入弹性变形技术,提高了拼接图像的质量和自然度。论文详细信息如下:

J. Li, Z. Wang, S. Lai, Y. Zhai and M. Zhang, “Parallax-Tolerant Image Stitching Based on Robust Elastic Warping,” in IEEE Transactions on Multimedia, vol. 20, no. 7, pp. 1672-1687, July 2018, doi: 10.1109/TMM.2017.2777461.

项目代码已托管至GitHub,欢迎Star支持。

代码实现

以下是主程序文件 main.py 的代码示例:

import cv2 as cv
from load_data import load_data
from comp_KR import comp_KR
from mosaic_global import mosaic_global
from mosaic_local_ori import mosaic_local_ori
import matplotlib.pyplot as plt

data_path = 'images/DHW-temple/'
imfile1 = data_path + '4.jpg'
imfile2 = data_path + '5.jpg'
im1 = cv.imread(imfile1)
im2 = cv.imread(imfile2)
X1, X2 = load_data(im1, im2)
print("Number of matches: ", X1.shape[1])
H, X1_ok, X2_ok = comp_KR(im1, im2, X1, X2)
print("H =\n", H)
print("H normalize =\n", H / H[2, 2])
mosaic = mosaic_global(im1, im2, H)
cv.imwrite(data_path + 'mosaic_global.jpg', mosaic)
cv.imshow("mosaic_global", mosaic)
cv.waitKey(1)
mosaic = mosaic_local_ori(im1, im2, H, X1_ok, X2_ok)
cv.imwrite(data_path + 'mosaic_REW.jpg', mosaic)
cv.imshow("mosaic_REW", mosaic)
cv.waitKey(0)

其中,load_data.py 文件用于提取和匹配图像特征点,comp_KR.py 文件用于计算全局单应性矩阵,mosaic_global.pymosaic_local_ori.py 分别用于全局和局部对齐的图像拼接。

运行结果展示


全局拼接结果
弹性局部对齐结果
全局拼接结果
弹性局部对齐结果
全局拼接结果
弹性局部对齐结果
全局拼接结果
弹性局部对齐结果

推荐阅读
  • python爬虫Demo
    1爬虫功能:爬取某域名下所有网页,比如爬取python文档 https:docs.python.orgzh-cn3 ,爬取之后, ... [详细]
  • 深入理解Java类加载机制
    本文详细探讨了Java虚拟机(JVM)中类加载器的工作原理,特别是如何通过类的全限定名从外部源获取二进制字节流,以及不同类型的类加载器及其在双亲委派模型中的角色。 ... [详细]
  • HTML5实现逼真树叶飘落动画详解
    本文详细介绍了如何利用HTML5技术创建一个逼真的树叶飘落动画,包括HTML、CSS和JavaScript的代码实现及优化技巧。 ... [详细]
  • 本文探讨了在Python中利用sqlite3库创建或重定义SQLite函数的方法,包括自定义函数和修改现有函数的行为。 ... [详细]
  • 本文探讨了如何在Python中计算两个给定时间字符串(格式为HH:MM:SS)之间的时间差,并提供了详细的代码示例及解决方案。 ... [详细]
  • C#反射reflection
    C#shanzm目录简介引入1.新建类库2.类库的使用3.反射反射实例1反射实例2反射实例3简介反射(reflection)是什么?在《精通C#》中是这么说的“反射就是一个运行库发 ... [详细]
  • Struts2(六) 用Struts完成客户列表显示
    Struts完成客户列表显示所用的基础知识在之前的随笔中已经讲过。这篇是介绍如何使用Struts完成客户列表显示。下面是完成的代码执行逻辑图:抽取项目部分代码相信大家 ... [详细]
  • 本文探讨了Java中实现定时任务的几种常见方式,包括java.util.Timer、ScheduledExecutorService以及Spring Task,并对每种方法进行了详细的代码示例和优缺点分析。 ... [详细]
  • 本文详细介绍了如何在Python环境中配置与Oracle数据库的连接,包括必要的软件安装和环境变量设置等步骤,旨在为初学者提供清晰的操作指南。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 本题要求设计一个特殊的栈数据结构,该结构支持常规的栈操作,并额外提供一个min函数,用于返回栈中的最小值,且所有操作的时间复杂度均为O(1)。 ... [详细]
  • 本文介绍了一种使用状态压缩动态规划(状压DP)解决售货员难题的方法。通过定义dp[S][i]表示状态S下以i作为终点的最小代价,详细解释了状态转移方程及其实现。 ... [详细]
  • 请看|差别_Android 6.0 运行时权限处理解析
    请看|差别_Android 6.0 运行时权限处理解析 ... [详细]
  • 本文介绍如何利用QFileSystemModel进行目录的浏览、创建及删除操作,并提供了一个简单的对话框界面实现。 ... [详细]
  • 本次竞赛包含三个编程题目,旨在考察参赛者对数学逻辑及时间处理的能力。题目涉及筛选特定条件下的数字、Unix时间戳转换以及数列中元素关系的分析。 ... [详细]
author-avatar
huo斌_340
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有